iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
1
DevOps

DevOps with Proxmox系列 第 12

Day 12 - Ansible Ad-Hoc Mode

  • 分享至 

  • xImage
  •  

在開始講 Ansible 怎麽用前,我們先講個比較簡單的 Ansible 用法, Ad-Hoc
不過在那之前,我們先講怎麽安裝 Ansible

安裝 Ansible 的方式很簡單,首先你的電腦上要有 pip,這是 Python 的套件管理工具
接下來,要安裝 Ansible 的話只要一行 pip install ansible 就能搞定

好了,我們來介紹 Ad-Hoc 吧,不過先講個 Ansible 最基礎的概念, inventory

inventory 是 Ansible 用來得知有哪些裝置要管理的檔案,一個 inventory 的檔案範例大概長這樣

all:
  hosts:
    mail.example.com:
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.example.com:
    dbservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:

inventory 檔案裡,你可以定義你的主機群,Ansible 會利用這些資訊來去判斷在操作時,需要對哪些主機進行操作

而如果有機器需要些特殊設定,例如登入的使用者、SSH 的 port 需要調整...等等,也可以在 inventory 裡進行設定,如下

atlanta:
  host1:
    ansible_user: admin
    ansible_port: 22222
  host2:
    http_port: 303
    maxRequestsPerChild: 909

inventory 的彈性非常高,但,如果有很多台機器需要一樣的設定,也可以用 group variable 的方式進行設定

atlanta:
  hosts:
    host1:
    host2:
  vars:
    ntp_server: ntp.atlanta.example.com
    proxy: proxy.atlanta.example.com

Inventory 還有很多可以調整的地方,以及實務上的 best practices
更多資訊請參閱 How to build your inventory

我們假設我們有台機器,上面有 Ubuntu,然後我們已經知道了它的 IP
我們來寫第一個 inventory

all:
  children:
    webservers:
      hosts:
        172.25.0.1:
          ansible_user: root

寫好 inventory 後,我們先來試看看 Ansible 能不能利用 Ad-Hoc 讀到這臺機器
Ansible 有個功能叫做 gather_facts,這功能會先取得機器的資訊,我們可以用這個功能來驗證 Ansible 是否能正常與機器互動

如果要利用 Ansible 的 Ad-Hoc 的功能,我們要用這樣的指令
ansible [pattern] -m [module] -a "[module options]"

而我們要取得機器資訊的話,我們要使用的是 setup 這個 module
最後執行的指令是 ansible -i inventory webservers -m setup

而當 Ansible 要連到 inventory 的機器時,一般是使用 SSH 連線
如果你的主機從來沒連過這臺機器的話,由於你的電腦不知道能不能信任對方的金鑰
所以會看到這樣的 prompt

ansible_ssh_prompt

遇到這樣的訊息輸入 yes 即可,不過這樣的解法在機器數量增加時不適用
我們之後會說明怎麽解

當 Ansible 成功連到機器後,會自己去取得機器的資訊,然後會回傳一堆資訊給你
大概長的像這個樣子

ansible_setup_complete

看到這樣的畫面就代表你有成功連上機器,Ansible 也正確的取得機器資訊了

好了,那 Ad-Hoc 還能做什麼呢?

我們可以利用 Ad-Hoc 模式來安裝 Nginx...

ansible_apt_nginx

可以利用 Ad-Hoc 模式來複製檔案...

ansible_copy_module

可以利用 Ad-Hoc 模式重新啟動服務...

ansible_systemd_module

甚至可以利用 Ad-Hoc 模式重新開機

ansible_reboot_module

基本上,大多數你想做的事情, Ansible Ad-Hoc 都能做到

不過,如果我一次想要做很多事,這樣 Ad-Hoc 我還不是要跑很多指令?

對,所以接下來我們要介紹 Ansible Playbook,讓你把很多指令寫成一個集合,每次都只要執行一行指令就能做完很多事情
明天介紹 Playbook


上一篇
Day 11 - Ansible 簡介
下一篇
Day 13 - Ansible Playbook
系列文
DevOps with Proxmox30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言